# 自动寻找未翻译文字
# 简介
项目中有中英文语言需求,存在很多漏翻译的,一个一个去发现不现实,于是通过node.js去自动找出所有未翻译的语言。
# 架构
# 入口
通过bat脚本跑node
node check_cn_in_en.js
node find_omit.js
pause
# 配置
将需要配置的例如:入口文件、出口文件、需忽略文件等单独使用json文件进行配置。
# lib
一些工具函数
# 主函数
# 找出已翻译但含中文的
项目的翻译都在一个文件中,只需遍历这文件内容即可。
1、获取配置文件
2、正则
// 匹配中文
var CN_REG = /[\u4e00-\u9fa5]/
// 匹配每行的内容 "UDP": "UDP"
var LINE_REG = /".*?"\s*:\s*"(.*)"/
3、跑起来
通过fs.readFileSync(filePath, { encoding: 'utf-8' });
读出文件内容
通过split(/\r?\n/)
分割出每行代码
再循环通过中文的正则匹配,记录
最后通过
fs.writeFile(OUT_FILE, out.join('\n\n'), err => {
if(err)console.log(err);
});
写成文件
# 找出代码文件中未翻译的
1、获取配置,需要寻找的代码文件(夹)
2、 删除之前的记录
const fs = require('fs');
function delDir(path){
let files = [];
if(fs.existsSync(path)){
files = fs.readdirSync(path);
files.forEach((file, index) => {
let curPath = path + "/" + file;
if(fs.statSync(curPath).isDirectory()){
delDir(curPath); //递归删除文件夹
} else {
fs.unlinkSync(curPath); //删除文件
}
});
fs.rmdirSync(path);
}
}
module.exports = delDir;
3、根据入口,判断是文件夹就递归读,是文件就走主逻辑
4、主逻辑
读文件
通过正则去除注释代码
//去掉注释代码 //、/**/ 两种
content = content.replace(/^\s*(\/\/.*).*$/mg, '');
content = content.replace(/\/\*(.|\r|\n)*?\*\//mg, '');
通过正则找出需要翻译的文字
// _("翻译")
var reg = /_\(('|")(.+?)(?:\1\)|\1,)/g;
记录需要翻译的文字、该文字所在文件路径
5、获取已翻译文件列表
6、查找没有翻译的
7、打印出来